package top.shiyiri.compare;

import org.junit.Test;

import java.util.Arrays;
import java.util.Comparator;

/**
 * @author Aunean
 * @date 2022/1/3
 */
public class ComparatorTest {
    /*
    Comparator接口的使用：定制排序
    1.背景：
    当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码，
    或者实现了java.lang.Comparable接口的排序规则不适合当前的操作，那
    么可以考虑使用 Comparator 的对象来排序，强行对多个对象进行整体排
    序的比较。
    2.重写 compare(Object o1,Object o2)方法，比较o1和o2的大小：
        如果方法返回正整数，则表示o1大于o2；
        如果返回 0，表示相等；
        返回负整数，表示 o1小于o2。

     */
    @Test
    public void test1() {
        String[] arr = new String[]{"aa", "zz", "cc", "bb", "uu", "ww", "dd", "nn"};
        Arrays.sort(arr, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return -o1.compareTo(o2);
            }
        });
        System.out.println(Arrays.toString(arr));
    }

    @Test
    public void test2() {
        Goods[] arr = new Goods[5];
        arr[0] = new Goods("联想", 20);
        arr[1] = new Goods("华为", 60);
        arr[2] = new Goods("小米", 10);
        arr[3] = new Goods("戴尔", 40);
        arr[4] = new Goods("微软", 40);
        Arrays.sort(arr, new Comparator<Goods>() {
            @Override
            public int compare(Goods o1, Goods o2) {
                if (o1.getName().equals(o2.getName())) {
                    return -Double.compare(o1.getPrice(), o2.getPrice());
                } else {
                    return -o1.getName().compareTo(o2.getName());
                }
            }
        });
        System.out.println(Arrays.toString(arr));
    }
}
